package com.zretc.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.zretc.dao.BlogMapper;
import com.zretc.dao.LogMapper;
import com.zretc.entity.Blog;
import com.zretc.entity.Log;
import com.zretc.service.BlogService;
import com.zretc.util.PageData;

/**
 * 事务管理 这service层写注解
 * 
 * @Transactional :类前，当前类的所有方法都是通过spring事务管理的
 * @Transactional :方法的前面，这个方法是支持spring的事务管理的
 * @author Administrator
 *
 */
@Service
public class BlogServiceImpl implements BlogService {

	// 注入一个BlogMapper
	@Autowired
	private BlogMapper blogMapper;

	// 日志
	@Autowired
	private LogMapper logMapper;

	@Override
	public Blog selectBlog(int id) {
		// TODO Auto-generated method stub
		return blogMapper.selectBlog(id);
	}

	/**
	 * propagation = Propagation.REQUIRED 设置事务的传播特性. isolation
	 * 设置事务的隔离级别,READ_COMMITTED 避免脏读
	 */
	@Override
	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
	public boolean addBlog(Blog blog, Log log) {
		// 当然，我们这里是业务层，还有增加其他的业务代码.

		blogMapper.addBlog(blog);

		// 模拟异常发生
		String str = null;
		// System.out.println(str.length());

		// 等下这里会增加一个日志(日志表，实体类，dao)
		logMapper.addLog(log);

		return true;
	}

	/**
	 * 
	 */
	@Override
	public PageData<Blog> selectBlogByLike(int page, int limit, String keywords) {
		// 设置起始位置

		int start = 0;
		if (page >= 1) {
			start = (page - 1) * limit;
		}
		// 查询总页数
		int totalCount = blogMapper.selectBlogsByLikeCount(keywords);

		// 分页的数据
		List<Blog> data = blogMapper.selectBlogsByLike(start, limit, keywords);

		//构造方法 赋值内容为 数据 总记录数  limit  page
		PageData<Blog> pageData = new PageData<>(data, totalCount, limit, page);
		
		//还有: code 从layui哪里来的
		pageData.setCode(0);
		pageData.setMsg("");
		
		return pageData;

	}

}
